/**
 * Clase que almacena informacion
 * 
 * @author HPCIII_Team2013
 */

package cl.ucn.hpc.almacenamiento;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.io.Serializable;

public class BlockingStorage implements Serializable {
	//Creado automaticamente por java para clases serializables
	private static final long serialVersionUID = -8940280640784863596L;
	
	private final String filepath;	
	private static BlockingStorage INSTANCIA = null;

    /**
     *  Constructor de la clase.
     * 
     * @param String _filepath Directorio donde debe almacenar los datos.
     */
	public BlockingStorage(final String _filepath) {
		this.filepath = _filepath;
	}
	
	/**
	 * Obtiene una instancia de la clase. 
	 * Si no ha sido creada, la crea. En caso contrario entrega la isntancia ya existente.
	 * 
	 * @param _filepath Directorio donde debe almacenar los datos
	 * @return La instancia de la clase
	 */
	public static BlockingStorage getInstance(final String _filepath) {

		synchronized (BlockingStorage.class) {
			if (INSTANCIA == null) {
				INSTANCIA = new BlockingStorage(_filepath);
			}
			return INSTANCIA;
		}

	}
	
    /**
     * Guarda el texto recibido.
     * 
     * @param text Texto a almacenar.
     * @param nombre Nombre del archivo donde se guardara.
     * @return archivo creado.
     * @throws IOException Si no puede crear el FileOutputStream.
     */
	public File blockingSave(final String text, final String nombre) throws IOException {
		PrintStream out = null;
		try {
			out = new PrintStream(new FileOutputStream((filepath + File.separatorChar + nombre),true));
			out.append(text);
		} finally {
			if (out != null)
				out.close();
		}

		File f = new File(filepath + File.separatorChar + nombre);

		if (f != null && f.exists()) {
			return f;
		}
		return null;
	}

}
